#ifndef __TASKQUEUE_H__
#define __TASKQUEUE_H__

#include "head.h"
#include "handle.h"

//待处理指令队列结点
typedef struct task_s{
    int net_fd;
    CmdType type;
    char data[BUF_SIZE];
    struct task_s *pNext;
}task_t;

//待处理指令队列
typedef struct taskqueue_s{
    task_t *pHead;                          //队列头
    task_t *pTail;                          //队列尾
    int q_size;                             //队列长度
    int exit_flag;                          //结束标记
    pthread_mutex_t lock;                   //取队列指令时用的锁
    pthread_cond_t cond;                    //信号
}task_queue_t;

//初始化队列
int queueInit(
    task_queue_t *q                         //
);

//任务入队
int taskEnQueue(
    task_queue_t *queue,                    //任务队列
    int net_fd,                             //
    CmdType type,                           //指令类型
    const char * data                       //指令参数
);

//任务出队
int taskDeQueue(
    task_queue_t *queue,                    //任务队列
    task_t * task                           //取出来的指令
);

//删除队列
int destroyQueue(
    task_queue_t *queue                     //任务队列
);

//判断队列为空
bool isQueueEmpty(
    task_queue_t *queue
);

//广播退出
int taskQueueExit(
    task_queue_t *queue
);

#endif
